// 问题三：日期时间处理和UTC

// 解释：
// 使用UTC日期进行天数偏移计算的原因：
// 1. 避免夏令时(DST)的影响，确保计算的一致性
// 2. 夏令时会导致本地时间在某些日期增加或减少1小时
// 3. UTC时间没有夏令时调整，适合进行日期计算

import 'dart:core';

void main() {
  // 获取当前时间
  final now = DateTime.now();

  // 转换为UTC时间
  final utcNow = now.toUtc();

  print('当前本地时间: $now');
  print('当前UTC时间: $utcNow');

  // 演示不同时区的时间
  final chinaTime = DateTime.now().toLocal(); // 中国时区(UTC+8)
  final newYorkTime = DateTime.now().toUtc().subtract(
    Duration(hours: 4),
  ); // 美洲纽约(UTC-4)
  final lagosTime = DateTime.now().toUtc().add(
    Duration(hours: 1),
  ); // 非洲拉各斯(UTC+1)
  final londonTime = DateTime.now().toUtc(); // 英国伦敦(UTC+0/UTC+1 夏令时)

  print('\n不同时区当前时间:');
  print('中国时间: $chinaTime');
  print('纽约时间: $newYorkTime');
  print('拉各斯时间: $lagosTime');
  print('伦敦时间: $londonTime');
  print('UTC时间: $utcNow');

  // 演示天数偏移计算
  final daysToAdd = 30;

  // 本地时间计算(可能受夏令时影响)
  final localFuture = now.add(Duration(days: daysToAdd));

  // UTC时间计算
  final utcFuture = utcNow.add(Duration(days: daysToAdd));

  print('\n30天后:');
  print('本地时间计算: $localFuture');
  print('UTC时间计算: $utcFuture');

  // 夏令时影响演示
  final beforeDst = DateTime(2023, 3, 25, 12, 0, 0); // 夏令时开始前
  final afterDst = DateTime(2023, 3, 26, 12, 0, 0); // 夏令时开始后

  print('\n夏令时影响:');
  print('夏令时开始前(伦敦): ${beforeDst.toUtc()}');
  print('夏令时开始后(伦敦): ${afterDst.toUtc()}');
}
